#include <iostream>
#include <sstream>

#include "conta_especial.h"
#include "conta_exception.h"

//-------------------------------------------------------------------
/*!
 * @fn conta_especial::conta_especial( unsigned long num_conta, double saldo, double limite )
 * @brief construtor padrão
 */
conta_especial::conta_especial( unsigned long num_conta, double saldo, double limite )
: conta_simples(num_conta, saldo)
, d_limite(limite)
{
}
//-------------------------------------------------------------------
/*!
 * @fn conta_especial::~conta_especial( void )
 * @brief destrutor padrão
 */
conta_especial::~conta_especial( void )
{
}
//-------------------------------------------------------------------
/*!
 * @fn bool conta_especial::saque( double valor )
 * @brief realize saque na conta atual, caso houver montante
 * @param valor montante para saque
 * @return true para saque realizado, false para erro
 */
bool conta_especial::saque( double valor )
{
    bool bln_result = false;

    try {
        if ( (valor <= (this->d_saldo + this->d_limite)) && (valor) ) {
            this->d_saldo -= valor;
            std::cout << "Conta " << this->ul_numero_conta << ": sacado R$" << valor << std::endl;
            bln_result = true;
        } else
            throw conta_exception("Não foi possível realizar o saque");
    } catch( std::exception& e ) {
        std::cerr << e.what() << std::endl;
    }

    return (bln_result);
}
//-- EOF - conta_simples.cpp ----------------------------------------
